package com.cms.recursoshumanos.json.object;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.cms.recursoshumanos.cache.ListaCumpleanosCache;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.object.Contacto;
import com.cms.recursoshumanos.object.Departamento;
import com.cms.recursoshumanos.object.Empleado;
import com.cms.recursoshumanos.object.Persona;
import com.cms.recursoshumanos.object.Sede;
import com.cms.recursoshumanos.object.list.ListaContacto;
import com.cms.recursoshumanos.utilities.Tool;

public class JsonObjectGetEventoCumpleano 
{

	private static JsonObjectGetEventoCumpleano _instance = null;
	public static JsonObjectGetEventoCumpleano getInstance() {
		if(_instance == null)
			_instance = new JsonObjectGetEventoCumpleano();
		
		return _instance;
	}
	private String Result;
	public JsonObjectGetEventoCumpleano()
	{
	}
	private static final String
	
		GETEVENTOSCUMPLE = "GETEVENTOSCUMPLE",
		GETEVENTOSCUMPLE_STATUS = "STATUS",
		GETEVENTOSCUMPLE_DATA = "DATA",
		GETEVENTOSCUMPLE_DATOS_EVENTOS_CUMPLE = "DATOS_EVENTOS_CUMPLE",
		
		GETEVENTOSCUMPLE_PERSONA_ID = "persona_id",
		GETEVENTOSCUMPLE_PERSONA_CI = "ci_persona",
		GETEVENTOSCUMPLE_PERSONA_NOMBRE_1 = "nombre_persona_1",
		GETEVENTOSCUMPLE_PERSONA_NOMBRE_2 = "nombre_persona_2",
		GETEVENTOSCUMPLE_PERSONA_APELLIDO_1 = "apellido_persona_1",
		GETEVENTOSCUMPLE_PERSONA_APELLIDO_2 = "apellido_persona_2",
		GETEVENTOSCUMPLE_PERSONA_NRO_TLF_1 = "nro_tlf_persona_1",
		GETEVENTOSCUMPLE_PERSONA_NRO_TLF_2 = "nro_tlf_persona_2",
		GETEVENTOSCUMPLE_PERSONA_URL_FOTO = "url_foto_persona",
		GETEVENTOSCUMPLE_PERSONA_FECHA_NACIMIENTO = "fecha_nacimiento",
		GETEVENTOSCUMPLE_PERSONA_EMAIL = "email_persona",
		GETEVENTOSCUMPLE_PERSONA_SEXO = "sexo_persona",
		
		GETEVENTOSCUMPLE_DEPARTAMENTO_ID = "departamento_id",
		GETEVENTOSCUMPLE_DEPARTAMENTO_NOMBRE = "nombre_departamento",
		GETEVENTOSCUMPLE_DEPARTAMENTO_CARGO = "cargo_departamento",
		
		GETEVENTOSCUMPLE_SEDE_ID = "sede_id",
		GETEVENTOSCUMPLE_SEDE_NOMBRE = "nombre_sede";
	

	public void fromJSON (String jsonString) 
	{
		if (jsonString != null)
		{
			if (!jsonString.equals(""))
			{
				try
				{
					JSONObject jsonObject = new JSONObject(jsonString);
					JSONObject getListaEvento = jsonObject.getJSONArray(GETEVENTOSCUMPLE).getJSONObject(0);
					String status = getListaEvento.getString(GETEVENTOSCUMPLE_STATUS);
					
					Result = status;
					
					if (status.equals(Constant.CODE_OK))
					{
						
						JSONArray data = getListaEvento.getJSONArray(GETEVENTOSCUMPLE_DATA);
						
						JSONObject objeto_data = data.getJSONObject(0);
						JSONArray datos_evento = objeto_data.getJSONArray(GETEVENTOSCUMPLE_DATOS_EVENTOS_CUMPLE);
		
						ListaContacto listado = new ListaContacto();
						
						for (int i = 0; i < datos_evento.length(); i++ )
						{
							JSONObject json_evento = datos_evento.getJSONObject(i);
							listado.addContacto(getContacto(json_evento));
						}
						ListaCumpleanosCache.getInstance().setListaCumple(listado);
					}
					
				} 
				catch (JSONException ex) 
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}
				catch (Exception ex) 
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}
			}
			else
			{
				Result = Constant.CODE_NOT_SERVER_RESPONSE;
			}
		}
		else
		{
			Result = Constant.CODE_NOT_SERVER_RESPONSE;
		}
	}

	public String getResult()
	{
		return Result;
	}
	
	public Contacto getContacto(JSONObject json_persona)
	{
		try 
		{
			
			Contacto elContacto = new Contacto( new Empleado( 
														new Persona(Integer.parseInt(json_persona.getString(GETEVENTOSCUMPLE_PERSONA_ID)),
																	json_persona.getString(GETEVENTOSCUMPLE_PERSONA_CI),
																	json_persona.getString(GETEVENTOSCUMPLE_PERSONA_NOMBRE_1),
																	(json_persona.getString(GETEVENTOSCUMPLE_PERSONA_NOMBRE_2).equals("null") ?
																			null :
																			json_persona.getString(GETEVENTOSCUMPLE_PERSONA_NOMBRE_2) ),
																	json_persona.getString(GETEVENTOSCUMPLE_PERSONA_APELLIDO_1), 
																	(json_persona.getString(GETEVENTOSCUMPLE_PERSONA_APELLIDO_2).equals("null") ?
																			null :
																			json_persona.getString(GETEVENTOSCUMPLE_PERSONA_APELLIDO_2)), 
																	null, 
																	json_persona.getString(GETEVENTOSCUMPLE_PERSONA_NRO_TLF_1),
																	(json_persona.getString(GETEVENTOSCUMPLE_PERSONA_NRO_TLF_2).equals("null") ? 
																			null:
																			json_persona.getString(GETEVENTOSCUMPLE_PERSONA_NRO_TLF_2)),
																	Constant.URL_PERSONA+"/"+json_persona.getString(GETEVENTOSCUMPLE_PERSONA_ID)+"/"+
																			json_persona.getString(GETEVENTOSCUMPLE_PERSONA_URL_FOTO),
																	Tool.getInstance().parseStringToDate(json_persona.getString(GETEVENTOSCUMPLE_PERSONA_FECHA_NACIMIENTO)),
																	json_persona.getString(GETEVENTOSCUMPLE_PERSONA_SEXO),
																	json_persona.getString(GETEVENTOSCUMPLE_PERSONA_EMAIL)),
																	new Departamento(Integer.parseInt(json_persona.getString(GETEVENTOSCUMPLE_DEPARTAMENTO_ID)),
																						json_persona.getString(GETEVENTOSCUMPLE_DEPARTAMENTO_NOMBRE),
																						null,
																						null,
																						null,
																						null,
																						null),
																	new Sede(Integer.parseInt(json_persona.getString(GETEVENTOSCUMPLE_SEDE_ID)), 
																				json_persona.getString(GETEVENTOSCUMPLE_SEDE_NOMBRE)),
																	json_persona.getString(GETEVENTOSCUMPLE_DEPARTAMENTO_CARGO)
																	
													));
			return elContacto;
		} 
		catch (NumberFormatException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} 
		catch (JSONException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	
}



